package com.example.chuanganqi;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Vibrator;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.TextView;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity implements SensorEventListener {

    @BindView(R.id.tv)
    TextView mTv;
    @BindView(R.id.tv2)
    TextView mTv2;
    @BindView(R.id.tv3)
    TextView mTv3;
    @BindView(R.id.tv4)
    TextView mTv4;
    @BindView(R.id.tv5)
    TextView mTv5;
    @BindView(R.id.tv6)
    TextView mTv6;
    @BindView(R.id.tv7)
    TextView mTv7;
    private SensorManager manager;
    private Vibrator vibrator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        initView();
    }

    private void initView() {
        //传感器管理器
        manager = (SensorManager) getSystemService(SENSOR_SERVICE);
        //震动管理器
        vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
        //获取设备上所有的传感器
        List<Sensor> sensorList = manager.getSensorList(Sensor.TYPE_ALL);
        for (int i = 0; i < sensorList.size(); i++) {
            Log.i("传感器" + i, "initView: " + sensorList.get(i).getName());
        }
    }
    //传感器数据变化时回调
    //所有的传感器数据都是这个回调方法得到的
    @Override
    public void onSensorChanged(SensorEvent event) {
        //精度
        //event.accuracy
        //时间戳
        //event.timestamp
        //传感器的对象
        //event.sensor
        //传感器的数据
        int type = event.sensor.getType();
        if (type == Sensor.TYPE_ACCELEROMETER){
            //加速度传感器
            float x = event.values[0];
            float y = event.values[1];
            float z = event.values[2];
            mTv.setText("X:"+x);
            mTv2.setText("Y:"+y);
            mTv3.setText("Z:"+z);
            if (Math.abs(x) > 17 || Math.abs(y) > 17 || Math.abs(z) > 17){
                //摇一摇
                shake();
            }
        }else if (type == Sensor.TYPE_ORIENTATION){
            //绕z轴转过的角度,0度或者360的时候指向正北方
            float z = event.values[0];
            float x = event.values[1];
            float y = event.values[2];
            mTv4.setText("绕z轴转过:"+z);
            mTv5.setText("绕x轴转过:"+x);
            mTv6.setText("绕y轴转过:"+y);
        }else if (type == Sensor.TYPE_LIGHT){
            float x = event.values[0];
            mTv7.setText("光照强度:"+x);
        }
    }

    private void shake() {
        //1.音效
        MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.weichat_audio);
        mediaPlayer.start();
        //2.震动
        //方式1
        vibrator.vibrate(2000);
        //方式2
//这里使用的是一个长整型数组，数组的a[0]表示静止的时间，
// a[1]代表的是震动的时间，
// 然后数组的a[2]表示静止的时间，
// a[3]代表的是震动的时间……依次类推下去，然后这里的代码有一点小小的改变：
//        long[] patter = {1000, 1000, 2000, 50};
//        vibrator.vibrate(patter, -1);
    }

    @Override
    protected void onResume() {
        super.onResume();
        /*
         * 最常用的一个方法 注册事件
         * 参数1 ：SensorEventListener监听器
         * 参数2 ：Sensor 一个服务可能有多个Sensor实现，此处调用getDefaultSensor获取默认的Sensor
         * 参数3 ：模式 可选数据变化的刷新频率，多少微秒取一次。
         *
         * */
        //加速度传感器
        manager.registerListener(this,
                manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_NORMAL);

        //方向传感器
        manager.registerListener(this,
                manager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
                SensorManager.SENSOR_DELAY_NORMAL);
        //光照传感器
        manager.registerListener(this,
                manager.getDefaultSensor(Sensor.TYPE_LIGHT),
                SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
    @Override
    protected void onPause() {
        super.onPause();
        //注销
        manager.unregisterListener(this);
    }

}